/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Nivel;
import co.com.sed.model.beans.Ponderacion360;
import co.com.sed.model.beans.TipoEvaluador;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class Ponderacion360Peer {

	private static final String BUSCAR_PONDERACIONES360 =
		"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360 ";

	private static final String BUSCAR_PONDERACION360 =	
		"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360 "+
		"WHERE id_ponderacion_360 = &id_ponderacion_360";
	
	private static final String BUSCAR_PONDERACION360_POR_TIPOEVALUADOR =	
		"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360 "+
		"WHERE id_t_evaluador = &id_t_evaluador";
	
	private static final String BUSCAR_PONDERACION360_POR_NIVEL =	
		"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360 "+
		"WHERE id_nivel = &id_nivel";

	private static final String INSERTAR_PONDERACION360 =
		"INSERT INTO ponderacion_360(ponderacion, id_t_evaluador, id_nivel) VALUES "+
		"(&ponderacion, &id_t_evaluador, &id_nivel)";

	private static final String ACTUALIZAR_PONDERACION360 =
		"UPDATE ponderacion_360 "+
		"SET ponderacion = &ponderacion, id_t_evaluador = &id_t_evaluador, id_nivel = &id_nivel "+
		"WHERE id_ponderacion_360 = &id_ponderacion_360";

	private static final String ELIMINAR_PONDERACION360 =
		"DELETE FROM ponderacion_360 "+
		"WHERE id_ponderacion_360 = &id_ponderacion_360";

		
	/** busca en la base de datos todos los registros de la tabla "ponderacion360"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de ponderaciones360
	* @see         				ponderacion360, Statement
	*/
	public static ArrayList<Ponderacion360> buscarPonderaciones360(Statement stmt) {
		ArrayList<Ponderacion360> ponderaciones360 = new ArrayList<Ponderacion360>();

		String sql = BUSCAR_PONDERACIONES360; //"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM Ponderacion360";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Ponderacion360 p360 = new Ponderacion360();

					p360.setIdPonderacion360(rs.getInt("id_ponderacion_360"));
					p360.setPonderacion(rs.getFloat("ponderacion")); 
					p360.setTipoEvaluador(new TipoEvaluador(rs.getInt("id_t_evaluador")));
					p360.setNivel(new Nivel(rs.getInt("id_nivel")));
					
					ponderaciones360.add(p360);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return ponderaciones360;
	}
	
	/** busca en la base de datos un registro de la tabla "ponderacion360"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idPonderacion360	id de la ponderacion360 que se desea cosultar
	* 
	* @return					ponderacion360 buscada
	* @see         				ponderacion360, Statement
	*/
	public static Ponderacion360 buscarPonderacion360(Statement stmt, int idPonderacion360) {
		Ponderacion360 ponderacion360 = new Ponderacion360();

		String sql = BUSCAR_PONDERACION360;
		//"SELECT id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360 "+
		//"WHERE id_t_evaluador = &id_t_evaluador";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_ponderacion_360", String.valueOf(idPonderacion360));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					ponderacion360.setIdPonderacion360(rs.getInt("id_ponderacion_360"));
					ponderacion360.setPonderacion(rs.getFloat("ponderacion"));
					ponderacion360.setTipoEvaluador(new TipoEvaluador(rs.getInt("id_t_evaluador")));
					ponderacion360.setNivel(new Nivel(rs.getInt("id_nivel")));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return ponderacion360;
	}
	
	/** busca en la base de datos todos los registros de la tabla "ponderacion360" que pertenescan a un TipoEvaluador
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de ponderaciones360
	* @see         				ponderacion360, Statement
	*/
	public static ArrayList<Ponderacion360> buscarPonderacion360PorTipoEvaluador(Statement stmt, int idTipoEvaluador) {
		ArrayList<Ponderacion360> ponderaciones360 = new ArrayList<Ponderacion360>();

		String sql = BUSCAR_PONDERACION360_POR_TIPOEVALUADOR;

		// se setean los "parametros":id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360
		sql = sql.replaceAll("&id_t_evaluador", "" + idTipoEvaluador);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Ponderacion360 p360 = new Ponderacion360();
					
					p360.setIdPonderacion360(rs.getInt("id_ponderacion_360"));
					p360.setPonderacion(rs.getFloat("ponderacion")); 
					p360.setTipoEvaluador(new TipoEvaluador(rs.getInt("id_t_evaluador")));
					p360.setNivel(new Nivel(rs.getInt("id_nivel")));
											
					ponderaciones360.add(p360);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return ponderaciones360;
	}
	
	
	/** busca en la base de datos todos los registros de la tabla "ponderacion360" que pertenescan a un nivel
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de ponderaciones360
	* @see         				Ponderacion360, Statement
	*/
	public static ArrayList<Ponderacion360> buscarPonderacion360PorNivel(Statement stmt, int idNivel) {
		ArrayList<Ponderacion360> ponderaciones360 = new ArrayList<Ponderacion360>();

		String sql = BUSCAR_PONDERACION360_POR_NIVEL;

		// se setean los "parametros": id_ponderacion_360, ponderacion, id_t_evaluador, id_nivel FROM ponderacion_360
		sql = sql.replaceAll("&id_nivel", "" + idNivel);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Ponderacion360 p360 = new Ponderacion360();
					
					p360.setIdPonderacion360(rs.getInt("id_ponderacion_360"));
					p360.setPonderacion(rs.getFloat("ponderacion")); 
					p360.setTipoEvaluador(new TipoEvaluador(rs.getInt("id_t_evaluador")));
					p360.setNivel(new Nivel(rs.getInt("id_nivel")));
											
					ponderaciones360.add(p360);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return ponderaciones360;
	}
	
	
	/** Inserta una Ponderacion360 en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param ponderacion360	ponderacion360 que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarPonderacion360(Statement stmt, Ponderacion360 ponderacion360) throws SQLException {
		int idNuevaPonderacion360 = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_PONDERACION360;
			 //se setean los "parametros": &ponderacion, &tipoEvaluacion, &tipoEvaluador 
			sql = sql.replaceAll("&ponderacion", "" + ponderacion360.getPonderacion())
			 		 .replaceAll("&id_t_evaluador", "" + ponderacion360.getTipoEvaluador().getIdTipoEvaluador())
			 		 .replaceAll("&id_nivel", "" + ponderacion360.getNivel().getIdNivel());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaPonderacion360 = rs.getInt("id_ponderacion_360");
				Util.print("nuevo registro: " + idNuevaPonderacion360);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaPonderacion360;
	}
		
		
	/** Actualiza una ponderacion360 en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param ponderacion360	ponderacion360 que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarPonderacion360(Statement stmt, Ponderacion360 ponderacion360) throws SQLException {
		String sql = ACTUALIZAR_PONDERACION360;
		 //se setean los "parametros": &id_ponderacion_360, &ponderacion, &tipoEvaluador, &tipoEvaluador
		sql = sql.replaceAll("&id_ponderacion_360", "" + ponderacion360.getIdPonderacion360())
		 		 .replaceAll("&ponderacion", "" + ponderacion360.getPonderacion())
		 		 .replaceAll("&id_t_evaluador", "" + ponderacion360.getTipoEvaluador().getIdTipoEvaluador())
		 		 .replaceAll("&tipoEvaluador", "" + ponderacion360.getTipoEvaluador().getIdTipoEvaluador());
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Ponderacion360 en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Ponderacion360	Ponderacion360 que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarPonderacion360(Statement stmt, Ponderacion360 ponderacion360) throws SQLException {
		String sql = ELIMINAR_PONDERACION360;
		// se setean los "id_ponderacion_360 = &id_ponderacion_360";
		sql = sql.replaceAll("&id_ponderacion_360", "" + ponderacion360.getIdPonderacion360());

		stmt.executeUpdate(sql);
	}
	
}
